# -*- makefile -*- Automake include file
# $Id: pluglib-bindings.ami 49069 2008-07-14 15:34:10Z mvidner $

# Wraps a pluglib for use by YaST. Done by using Swig for Perl, adding
# type information. Compiles, installs.

# expected input:
#  PLUGLIB_MODULE = the name after %module in .i
#  PLUGLIB_LIBRARY = the object file/library that is being wrapped
#  PLUGLIB_DEPEND = dependencies
# example:
#  PLUGLIB_MODULE = Storage
#  PLUGLIB_LIBRARY = .libs/liby2storage.so
#  PLUGLIB_DEPEND = ../../src/StorageInterface.h
#  include $(top_srcdir)/pluglib-bindings.ami

TARGET_PM = $(PLUGLIB_MODULE).pm
TARGET_SO = $(PLUGLIB_MODULE).so

# ydatadir or `pkg-config --variable=yast2dir yast2-devtools`/data ?
# putting files to a directory owned by another package?
# ok but then they should share prefixes (maybe not really)
PLGB_BASEDIR = $(ydatadir)/devtools/pluglib-bindings

# TODO configure
SWIG = swig
#SWIG = $(HOME)/pfx-swig-1.3.24/bin/swig
SWIGFLAGS = -I$(PLGB_BASEDIR)/swig -c++

# Process the .i file, creating a wrapper for Perl and a XML parse.
%_wrap.cc %_wrap.xml: %.i $(PLUGLIB_DEPEND)
	$(SWIG) -perl $(SWIGFLAGS) -o $*_wrap.cc -xmlout $*_wrap.xml $<

PLGB_TYPEINFO_XSL = $(PLGB_BASEDIR)/stylesheets/swigxml2typeinfo.xsl
PLGB_TYPEINFO_FILTER = $(PLGB_BASEDIR)/stylesheets/filter.pl

# Add typeinfo
# (sablotron indeed has fewer build dependencies than xsltproc)
# PLGB_TYPEINFO_FILTER opens all files in append mode
# which is strange but we can live with it by deleting the
# appropriate files beforehand.
$(TARGET_PM): %.pm: %_wrap.xml
	if test -d $(PLUGLIB_MODULE); then \
	  rm -f $(PLUGLIB_MODULE)/*.pm; \
	fi
	sabcmd $(PLGB_TYPEINFO_XSL) $< > $*.tpi
	perl $(PLGB_TYPEINFO_FILTER) < $*.tpi
	rm $*.tpi

# Install the Perl modules
PLGB_PMdir = $(moduledir)
PLGB_PM_DATA = $(TARGET_PM)
# Copy the directory with additional pm modules
install-data-local:
	if test -d $(PLUGLIB_MODULE); then \
	  cp --recursive $(PLUGLIB_MODULE) $(DESTDIR)$(PLGB_PMdir); \
	fi
# This is to ensure that automake generates the LTCXXCOMPILE variable.
# We need to use LTCXXCOMPILE because libtool puts in -fPIC on some
# architectures and also we get RPM_OPT_FLAGS via CXXCLAGS that way.
noinst_PROGRAMS = dummy_to_have_cxxcompile
dummy_to_have_cxxcompile_SOURCES = dummy_to_have_cxxcompile.cc
dummy_to_have_cxxcompile.cc:
	echo 'int main() {return 0;}' > $@

# Compile the wrapper
.libs/%_wrap.o: %_wrap.cc
	$(LTCXXCOMPILE) $(PERL_CFLAGS) -c -o $*_wrap.lo $<

# Link the wrapper and the actual library
$(TARGET_SO): %.so: .libs/%_wrap.o $(PLUGLIB_LIBRARY)
	$(CXXCOMPILE) -shared -o $@ $^

# Install the library
MY_PERL_VENDORARCH = $(subst /usr,$(prefix),$(PERL_VENDORARCH))
PLGB_SOdir = $(MY_PERL_VENDORARCH)
PLGB_SO_DATA = $(TARGET_SO)

CLEANFILES = $(PLUGLIB_MODULE)_wrap.*
